package jwcb.hire.admin.server.dictionary.controller;

import jwcb.hire.admin.api.config.domain.dto.ArgumentAddReqDTO;
import jwcb.hire.admin.api.config.domain.dto.ArgumentDTO;
import jwcb.hire.admin.api.config.domain.dto.ArgumentEditReqDTO;
import jwcb.hire.admin.api.config.domain.dto.ArgumentListReqDTO;
import jwcb.hire.admin.api.config.domain.vo.ArgumentVO;
import jwcb.hire.admin.api.config.frign.ArgumentFeignClient;
import jwcb.hire.admin.server.dictionary.domain.dto.SysArgumentDto;
import jwcb.hire.admin.server.dictionary.service.ISysArgumentService;
import jwcb.hire.common.core.utils.BeanCopyUtil;
import jwcb.hire.common.domain.domain.R;
import jwcb.hire.common.domain.domain.vo.BasePageVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@Slf4j
public class ArgumentController implements ArgumentFeignClient {

    @Autowired
    private ISysArgumentService sysArgumentService;
    /**
     * 新增参数
     * @param argumentAddReqDTO 新增参数请求DTO
     * @return Long
     */
    @PostMapping("/argument/add")
    public R<Long> add(@RequestBody @Validated ArgumentAddReqDTO argumentAddReqDTO) {
        return R.ok(sysArgumentService.add(argumentAddReqDTO));
    }

    /**
     * 参数列表
     * @param argumentListReqDTO 查看参数DTO
     * @return BasePageVO
     */
    @PostMapping("/argument/list")
    public R<BasePageVO<ArgumentVO>> list(@RequestBody @Validated ArgumentListReqDTO argumentListReqDTO) {
        BasePageVO<SysArgumentDto> serviceRes = sysArgumentService.list(argumentListReqDTO);
        BasePageVO<ArgumentVO> res = new BasePageVO<>();
        BeanCopyUtil.copyProperties(serviceRes,res);
        return R.ok(res);
    }



    /**
     * 编辑参数
     * @param argumentEditReqDTO 编辑参数DTO
     * @return Long
     */
    @PostMapping("/argument/edit")
    public R<Long> edit(@RequestBody @Validated ArgumentEditReqDTO argumentEditReqDTO) {
        return R.ok(sysArgumentService.edit(argumentEditReqDTO));
    }

    /**
     * 根据参数键查询参数对象
     * @param configKey 参数键
     * @return 参数对象
     */
    @Override
    public ArgumentDTO getByConfigKey( String configKey) {
        SysArgumentDto sysArgumentDto = sysArgumentService.getByConfigKey(configKey);
        if(sysArgumentDto != null) {
            ArgumentDTO argumentDTO = new ArgumentDTO();
            BeanCopyUtil.copyProperties(sysArgumentDto,argumentDTO);
        }
        return null;
    }


    /**
     * 根据多个参数键查询多个参数对象
     * @param configKeys 多个参数键
     * @return 多个参数对象
     */
    @Override
    public List<ArgumentDTO> getByConfigKeys(List<String> configKeys) {
        List<SysArgumentDto> sysArgumentDtos = sysArgumentService.getByConfigKeys(configKeys);
        return BeanCopyUtil.copyListProperties(sysArgumentDtos, ArgumentDTO::new);
    }
}
